%!TEX root = tesis-header.tex
\section{Inteligencia Artificial}
%\todo{Inteligencia, Cognición, Percepción, Aprendizaje, Conocimiento}

En esta sección se presentarán de forma detallada las acciones que tienen que ver con la inteligenia artificial del juego, primero se definirán los requisitos para tener los personajes autónomos que ya se describieron en la sección anterior, a continuación, se presentará el análisis para conseguir esto.

\subsection[IA en Videojuegos]{Inteligencia Artificial en Videojuegos}

% \begin{abstract}

%Inteligencia artificial dentro de los juegos
La inteligencia artificial dentro de un juego controla el comportamiento de los personajes que no reciben órdenes del jugador, este comportamiento define el momento y la acción que realizan basados en un objetivo.

El comportamiento de los personajes depende del tipo de videojuego que se esté diseñando. Actualmente los tipos de videojuego son muy variados, tanto en su forma de jugarlos, como los temas que proponen. Existen género de juegos como: acción, deportes, estrategia, rompecabezas, aventuras, de rol, entre otros.

El motor de juegos que se propone en este trabajo permite elegir al jugador dos perspectivas, pudiendo escoger entre modo acción o modo de vista aérea. Esto se logra cambiando la posición de la cámara dentro del ambiente, cambiando el modo de control de los personajes y la visualización del mundo virtual.

En este capítulo, se presentará la estructura que elegimos para resolver el problema de crear un juego que tuviera dos puntos de vista para el jugador, lo que da la libertad a este de interactuar en el ambiente virtual del juego en dos perspectivas diferentes, una con la cámara a espaldas del personaje y otra con la cámara elevada para poder elegir entre varios personajes aliados y comandarles acciones.

A este tipo de separación, la llamados multi-modos o multi-perspectiva. Existen dos puntos claves a la hora de implementar esta idea, la construcción de la escena y la definición de reglas para los personajes. Estos dos conceptos aunque muy relacionados entre sí a la hora de construir la estructura de un juego, deben separarse, ya sea para poder tener una base de código fuente para futuros juegos o para poder expandir las capacidades del juego que se esta realizando. De esto surge la idea de crear un Motor de juegos y una  escena específica para el juego de forma separada. Los elementos de estas dos partes de un mismo juego se deben relacionar de manera que resulte sencillo para un programador crear de forma sencilla su propia implementación, es decir, su propio juego, que es la meta final de este proyecto de tesis.
%\end{abstract}

A continuación se presentan los elementos que se consideraron para construir la lógica diseñada para implementar la inteligencia artificial en el videojuego.\cite{bioia} 

\subsubsection{Conocimiento de Dominio}

El problema aquí es que representar conocimiento en un personaje computacional es complicado debido a que basados en el comportamiento de un humano que tiene cierto sentido común, es complicado decidir si algo afecta al mundo o no, pensando en que el personaje autónomo no tiene sentido común y debemos dotarlo de ciertas nociones de conocimiento de su mundo acerca de la dinámica del mundo que lo rodea.

\subsubsection{Instruir a los personajes}

El comportamiento de un personaje está completamente determinado por una secuencia de acciones que se ejecutan. Esta es una simplificación común debido a que el resultado de estas acciones puede depender de factores ajenos al control del personaje. Por ejemplo, en un video juego, dos personajes pueden decidir correr hacía una montaña, pero si uno recibe un disparo en la pierna cuando va en camino, el comportamiento resultante de cada personaje se verá diferente.

Para personajes autónomos normales, que no poseen conocimiento de su entorno, necesitamos decidir de antemano que acciones ejecutarán para cada diferente situación que se les presente. En este caso decimos que el comportamiento del personaje es determinístico o predefinido.

Cuando el comportamiento del personaje no está completamente determinado de antemano nos referimos a un comportamiento no determinístico. El caso mas simple de comportamiento no deterministico es el que esta completamente no definido, pero un comportamiento aleatorio no es particularmente útil. En lugar de eso, el personaje necesita escoger su comportamiento para una tarea específica.

Un personaje consciente que sigue este comportamiento no predefinido puede elegir la acción más adecuada dependiendo de la tarea que tenga que realizar. Podemos decirle a un personaje los efectos de cada acción al darle ``objetivos''. El personaje puede entonces buscar la secuencia de acciones adecuadas para cumplir con el objetivo que le dimos, este comportamiento se conoce como ``basado en objetivos''.

Las ventajas y desventajas de estos tipos de comportamiento son variadas, pero siempre se debe encontrar un punto medio entre un comportamiento predefinido completamente y uno basado en objetivos para obtener un rendimiento óptimo. La idea aquí es darle al personaje tanto conocimiento sobre su entorno, como un objetivo a realizar.

$Conocimiento + Instrucciones = Comportamiento$

El conocimiento del entorno puede usarse para planear objetivos y las instrucciones proporcionan un ``bosquejo de plan'' de como alcanzar esos objetivos. Técnicamente este sigue siendo un comportamiento basado en objetivos, y por tanto es fácil de especificar, pero si se agrega información de heurística definid, tiene el potencial de acelerar el tiempo de ejecución.

Un personaje que puede elegir acciones no deterministicamente significa si puede escoger una acción y además recordar las otras elecciones que ha hecho. Si, después de pensar acerca de esas elecciones, el personaje puede darse cuenta si el resultado será favorable o no, entonces puede reconsiderar cualquiera de las alternativas que resultarían de elegir otras acciones. Este tipo de personaje es fácil de ordenar, pero es mas lento en su tiempo de respuesta, si damos objetivos a los personajes, estos pueden elegir la acción adecuada entre sus posibilidades para alcanzar estos objetivos.

\subsubsection{Adquisición de conocimiento}
El tipo más simple de conocimiento que un personaje puede adquirir por sí mismo es el estado actual de su mundo. Este tipo de adquisición de conocimiento se conoce como ``detección''.

\subsubsection{Discretización}

Un personaje consciente traduce la información de fenómenos continuos de su entorno, como datos discretos, por ejemplo la posición de un objeto, normalmente la posición de un objeto dentro de un mundo virtual varia muy poco con el paso del tiempo, pero en el modelo de inteligencia de un personaje, podemos elegir representar la posición en un tablero discreto. Entonces, por ejemplo, si un objeto se mueve dentro de una de las celdas del tablero, su posición para el personaje no cambiará. Solo cuando la posición del objeto pase de una celda a otra del tablero será cuando el personaje observe el cambio de posición.

\subsubsection{Incertidumbre}

El resultado mas importante de que el personaje solo posea un modelo simplificado del mundo es que, desde su punto de vista, el mundo es ahora, de alguna forma, impredecible. Obviamente, si el modelo de conocimiento es demasiado simplificado, el mundo para el personaje parecerá demasiado impredecible que no será capaz de usar el modelo de conocimiento para poder tomar ventaja de él.

Las personas y robot que interactúan en el mundo real, tienen que lidiar con cierto grado de incertidumbre todo el tiempo. Esto es, cuando una persona decide realizar cierta acción, no es completamente seguro de como le afectará el realizarla, entonces debe observar que ha pasado. Por tanto, para mantener esta correlación al modelo del mundo real, el modelo de conocimiento necesita ser actualizado regularmente con información del modelo del mundo real, a esto se refiere el término ``sensado o detección''.

\subsection{Implementación en el Videojuego}

Para lograr este nivel de abstracción en los personajes, se implementó un árbol de comportamiento jerárquico utilizando el concepto de ``Máquina de estados finitos jerárquica''\footnote{Hierarchical finite state machines}\cite{statecharts} el cual esta compuesto de estados que pueden representar acciones o transiciones del comportamiento. Con este tipo de máquinas de estado que estan basadas en la jerarquía de los elementos, secuencia de ejecución y comunicación. Con este tipo de diagramas se puede representar un comportamiento complejo con diagramas sencillos.

Este tipo de máquina de estados permite agrupar elementos para crear comportamientos más complejos.

El problema de crear una máquina de estados finitos\footnote{Finite state machines} para la resolución de este tipo de problemas es que este tipo de estructura es muy específica para el tipo de problema al que se aplica. Para este caso se requiere que sea una máquina de estado con una lógica reusable de forma que se pueda adaptar después para propósitos particulares.

\subsubsection{Árbol de comportamiento}

A continuación se presenta el árbol de comportamiento creado para solucionar las acciones que realizarán los personajes. La lógica que se creó en este árbol está basada en la funcionalidad de la aplicación demo que se preparó para este trabajo de tesis.

La aplicación que se creó para demostrar las capacidades en este proyecto de tesis consiste en crear dos equipos, cada uno con cinco integrantes.

\begin{itemize}
\item Cada miembro del equipo recibe un rol al inicio del juego, uno de defensa y otro de búsqueda.
\item Los miembros que reciben el rol de defensa deben patrullar el objetivo de su equipo
\item Los miembros que reciben el rol de búsqueda deben buscar el objetivo enemigo
\end{itemize}

{\em Patrulla del objetivo (rol de defensa)}

La patrulla del objetivo consiste en rodear el objetivo propio, buscar enemigos cercanos, acercarse a ellos e iniciar un ataque.

\begin{enumerate}
\item Identificar el objetivo propio
	Buscar enemigos, si encuentra, atacar
\item Definir una ruta alrededor del objetivo
	Buscar enemigos, si encuentra, atacar
\item Moverse a través de esa ruta
	Buscar enemigos, si encuentra, atacar
\end{enumerate}

{\em Buscar el objetivo enemigo (rol de búsqueda)}

Los miembros del equipo que reciben el rol de búsqueda, deben encontrar la ruta hacia el objetivo enemigo y moverse a él. Esto debe realizarse buscando enemigos en el camino y equivarlos como si fueran obstáculos en el camino.

\begin{enumerate}
\item Identificar el objetivo enemigo
	Buscar enemigos, si encuentra, esquivar
\item Iniciar el movimiento hacia el objetivo
	Buscar enemigos, si encuentra, esquivar
\item Detenerse al encontrar el objetivo (Fin del juego)
\end{enumerate}

%\subsection{Redes neuronales}
%\subsection{Topología propuesta}
